import { ref } from 'vue';
import { defineStore } from 'pinia';
import { COUNTRIES_LIST, type ICountry } from '@/constants/countries';

export const useCountryStore = defineStore('country', () => {
  const current = ref<ICountry>();

  async function getCountryCode() {
    try {
      // 1. 获取定位（高精度模式）
      const { latitude, longitude } = await uni.getLocation({
        type: 'wgs84',
        enableHighAccuracy: true,
        timeout: 10000
      });

      // 2. 匹配国家（含中国港澳台）
      const matched = matchCountry(latitude, longitude);
      if (!matched) return uni.showToast({ title: '未识别到国家' });

      // 3. 格式化结果（自动处理多语言名称）
      current.value = {
        ...matched,
        name: getLocalizedName(matched)
      };
    } catch (err: any) {
      console.error(err);
      // await uni.showToast({
      //   title: `获取失败：${err.errMsg}`,
      //   icon: 'none'
      // });
    }
  }

  /**
   * 经纬度匹配算法（含中国子地区）
   */
  function matchCountry(lat: number, lng: number) {
    // 优先匹配中国（含港澳台）
    const china = COUNTRIES_LIST.find((c) => c.countryCode === 'CN')!;
    if (isInBounds(lat, lng, china.bounds)) {
      // 检查子地区（台湾/香港/澳门）
      const region = (china.children ?? [])
        .map((code) => COUNTRIES_LIST.find((c) => c.countryCode === code))
        .find((reg) => isInBounds(lat, lng, reg!.bounds));
      return region || china;
    }

    // 匹配其他国家（含多语言）
    return COUNTRIES_LIST.find((c) => c.countryCode !== 'CN' && isInBounds(lat, lng, c.bounds));
  }

  /**
   * 边界验证（含±500米容错）
   */
  function isInBounds(
    lat: number,
    lng: number,
    bounds: {
      minLat: number;
      maxLat: number;
      minLng: number;
      maxLng: number;
    }
  ) {
    const tolerance = 0.005; // 约500米误差
    return (
      lat >= bounds.minLat - tolerance &&
      lat <= bounds.maxLat + tolerance &&
      lng >= bounds.minLng - tolerance &&
      lng <= bounds.maxLng + tolerance
    );
  }

  /**
   * 多语言名称处理（中文环境优先显示中文名称）
   */
  function getLocalizedName(country: ICountry) {
    const sysLang = uni.getAppBaseInfo().language!;
    if (sysLang.startsWith('zh')) {
      // 优先显示带「中國」前缀的地区名
      if (['TW', 'HK', 'MO'].includes(country.countryCode)) return country.name;
      // 其他国家返回中文名称（如「日本」而非Japan）
      return country.name.replace(/[a-zA-Z]+/g, ''); // 简化处理，实际需维护中文名映射
    }
    return country.name;
  }

  return {
    country: current,
    getCountryCode
  };
});
